package DataControl;
import java.nio.file.Path;
import java.nio.file.Paths;
import Data.ClinetData;
import Data.DataPort;
import Data.FileInfo;
import Data.FolderData;

/**
 * 客户端数据解析器
 */
public class ClientDataResolver implements IClientDataResolver { // 实现接口
    private ClinetData clinetData;
    private String Password="1575";
    private DataPort serverData;//服务器数据,用于解析命令
    private String Path=null;
    public ClientDataResolver(String Path) {
        clinetData=new ClinetData();
        serverData= new FolderData(Path);
        this.Path=Path;
    }

    /**
     * 更新服务器数据（服务器数据用于查找索引）
     * @param Path
     */
    @Override
    public void setServerData(String Path){
        this.Path=Path;
        serverData= new FolderData(Path);
    }

    /**
     * 解析命令
     * @param theClinetData
     * @return
     */
    @Override
    public ClinetData dealData(ClinetData theClinetData)
    {

        if (serverData==null){
            setServerData(Path);
        }
        System.out.println("客户端数据解析器：命令解析！");
        assert serverData!=null : "客户端数据解析器：服务器数据为空！";
        clinetData=theClinetData;//命令参数
        switch (clinetData.Command) {
            case "cd":
                if (clinetData.Param1 != null) {
                    int index = Integer.parseInt(clinetData.Param1); // 要进入的文件夹的索引
                    System.out.println("客户端数据解析器：进入文件夹命令（cd）,进入的文件夹索引为：" + clinetData.Param1);
                    FileInfo temp = (FileInfo) serverData.getIndexData(index); // 获取要进入的文件夹的路径
                    setServerData(temp.getPath());//更新客户端数据解析器中的服务器数据
                    clinetData.Param1 = temp.getPath();//构建新的客户端数据，以方便服务器使用
                    System.out.println("客户端数据解析器：进入文件夹命令（cd）,进入的文件夹路径为：" + clinetData.Param1);
                }
                return clinetData;

            case "ls":
                System.out.println("客户端数据解析器：显示文件夹命令（ls）,显示的文件夹数据");
                return clinetData;

            case "xz":
                if (clinetData.Param1 != null) {
                    System.out.println("客户端数据解析器：下载文件命令（xz）,下载的文件索引为：" + clinetData.Param1);

                    int index = Integer.parseInt(clinetData.Param1); // 要进入的文件夹的索引

                    FileInfo temp = (FileInfo) serverData.getIndexData(index); // 获取要下载的文件的路径
                    clinetData.Param1 = temp.getPath();//构建新的客户端数据，以方便服务器使用

                    System.out.println("客户端数据解析器：下载文件命令（xz）,下载的文件路径为：" + clinetData.Param1);
                }
                return clinetData;

            case "../":
                System.out.println("客户端数据解析器：准备进入上一级文件夹");
                Path path = Paths.get(serverData.getFileInfo().getPath());//获取当前文件夹的路径
                Path parentPath = path.getParent();//获取上一级文件夹的路径
                assert parentPath != null : "客户端数据解析器：上一级文件夹不存在";
                String temp=String.valueOf(parentPath);
                setServerData(temp);//更新客户端数据解析器中的服务器数据
                clinetData.Param1 = temp;//构建新的客户端数据，以方便服务器使用
                return clinetData;

            default:
                System.out.println("无效的命令：" + clinetData);
                return null;
        }

    }
}
